/*

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串，在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在，则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:

当 needle 是空字符串时，我们应当返回什么值呢？这是一个在面试中很好的问题。

对于本题而言，当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/implement-strstr
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

执行用时 :1072 ms, 在所有 C++ 提交中击败了13.50%的用户
内存消耗 :7 MB, 在所有 C++ 提交中击败了100.00%的用户

复杂度分析：
时间O(m x n) ,空间O(1)

为啥人家都这么快，直接调的库函数吗？还是手写了KMP。。。。
*/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
#include <stack>
using namespace std;

class Solution {
public:
    int strStr(string haystack, string needle) {
        if (haystack =="" && needle=="") {	//都为空串也能匹配
            return 0;
        }
        char* p = &haystack[0];
        int pos = 0;
        while (*p != '\0') {
            char* p1 = p;
            char* p2 = &needle[0];
            while (*p1 && *p2 && *p1==*p2) {
                p1++;
                p2++;
            }
            if (*p2 == '\0') {
                return pos;
            }
            pos++;
            p++;
        }
        return -1;
    }
};
int main(int argc, char const* argv[]) {
    Solution s;
    string a = "abcbbb";
    string b = "cb";
    cout<<s.strStr(a,b)<<endl;	
    return 0;
}
